// import { useGetDerivedNamespace } from "element-plus";
import { defineStore} from "pinia";
import { loginApi } from "@/api/user";
//在这段代码，只能成功登录才能执行
interface LoginParams{
    username:string;
    password:string;
}
// Pinia分为组合式和选项式子
// pinia中数据一刷新就没有了
export const userUserStore=defineStore("user",{
    state:()=>({
        // token:null,
        token:sessionStorage.getItem("token") || "", // token是后端返回的
        //token 首次登陆时发送到后端  一般是通过一些算法生成的字符串
        roles:sessionStorage.getItem("roles")?JSON.parse(sessionStorage.getItem("roles")!):[], // 角色是后端返回的
        username:sessionStorage.getItem("roles") || "",
        menu:sessionStorage.getItem("menu")?JSON.parse(sessionStorage.getItem("menu")!):[], //sessionStorage的存储方式，在页面关闭时就没了
        // 登录接口后，后端返回的菜单数据
    }),
    actions:{
        //调用api
        //async 异步操作
        async login(data:LoginParams){
            // 调用接口
            // const res = await loginApi(data);
            //es6的知识
            // const {data:{token:user:{username},menulist}} = await loginApi(data)
            // console.log("store",res);
            try {
                const {data:{token,user:{username,roles},menulist}} = await loginApi(data);
                this.token = token
                this.roles = roles
                this.menu = menulist
                this.username = username
                //sessionStorage的存储方式，在页面关闭时就没了
                sessionStorage.setItem("token",token)
                //本地存储只能存储基本类型，此处转化为字符串存储
                sessionStorage.setItem("roles",JSON.stringify(roles))
                sessionStorage.setItem("menu",JSON.stringify(menulist))
                sessionStorage.setItem("username",JSON.stringify(username))
                // const router = useRouter();
                // router.push("/")   在pinia 中，无法拿到路由对象  但是可以通过传参的形式
            }catch(error){
                console.log("error",error);
            }
        }
    }
})